package com.mlh.array;

/**
 * @author 缪林辉
 * @date 2024/8/15 23:40
 * @DESCRIPTION
 */
//给你一个未排序的整数数组 nums ，请你找出其中没有出现的最小的正整数。
// 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
// 输入：nums = [1,2,0]
// 输出：3
// 解释：范围 [1,2] 中的数字都在数组中。
public class 缺失的第一个正数 {
    //去力扣 看题解
    public int method1(int[] nums) {
        int len=nums.length;
        for (int i = 0; i < len; i++) {
            if(nums[i]<=0){
                nums[i]=len+1;
            }
        }
        for (int i = 0; i < len; i++) {
            int temp=Math.abs(nums[i]);
            if(temp-1<len&&nums[temp-1]>0){
                nums[temp-1]=-nums[temp-1];
            }
        }
        for (int i = 0; i < len; i++) {
            if(nums[i]>0){
                return i+1;
            }
        }
        return len+1;
    }

    public static int practice(int[] nums){
        int len=nums.length;
        for (int i = 0; i < len; i++) {
            if(nums[i]<=0){
                nums[i]=len+1;
            }
        }
        for (int i = 0; i < len; i++) {
            int temp=Math.abs(nums[i]);
            if(temp<=len&&nums[temp-1]>0){
                nums[temp-1]=-nums[temp-1];
            }
        }
        for (int i = 0; i <len ; i++) {
            if(nums[i]>0){
                return i+1;
            }
        }
        return len+1;
    }
}
